package edu.hawaii.halealohacli.command;

import org.wattdepot.client.WattDepotClient;

/**
 * Defines the common functionalities of a command class.
 * 
 * @author Andrea Connell
 * 
 */
public interface Command {

  /**
   * Meant to replace constructor arguments.  Using a null constructor
   * makes dynamic instantiation easier.
   *
   * @param args the arguments to the command
   * @param client the wattdepot client connection
   */
  public void initialize(String[] args, WattDepotClient client);
  
  /**
   * Runs the code necessary to complete this command.
   */
  public void execute();

  /**
   * Returns the command that invokes this class in the CLI System.
   * 
   * @return A string representing the command call for the CLI
   */
  public String getCommandName();
  
  /**
   * Returns the command usage string, can be multi-line.
   * 
   * @return the usage text to be displayed for the user
   */
  public String getCommandUsage();

}
